﻿using System;
using System.Collections.Generic;
using System.Web;
using System.Web.Services;
using System.Data;

/// <summary>
/// Summary description for servicio
/// </summary>
[WebService(Namespace = "http://tempuri.org/")]
[WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)]
[System.Web.Script.Services.ScriptService]
public class post : System.Web.Services.WebService
{
    PostServices PostsServices = new PostServices();
    UsuarioServices usuarioServices = new UsuarioServices();
    ComentarioServices comentarioServices = new ComentarioServices();
    TwitterAPI twitterAPI = new TwitterAPI();
    BancarServices bancanServices = new BancarServices();

    public post()
    {
        //Uncomment the following line if using designed components 
        //InitializeComponent(); 
    }

    [WebMethod]
    [System.Web.Script.Services.ScriptMethod(ResponseFormat = System.Web.Script.Services.ResponseFormat.Json)]
    public PostDTO CrearPost(string UsuarioId, string Titulo, string Contenido, string CategoriaPostId)
    {

        int idPost = PostsServices.CrearPost(Convert.ToInt32(UsuarioId), Titulo, Contenido, Convert.ToInt32(CategoriaPostId));
        Post post = PostsServices.BuscarPost(idPost.ToString());
        Usuario usuario = usuarioServices.BuscarUsuario(post.IdCreador);
        try
        {
            twitterAPI.actualizarEstado(usuario, "Acabo de crear un post llamado " + post.Titulo + ". Miralo en Comunarte!");
        }
        catch (TipoDeUsuarioNoTwitterException e)
        {
        
        }
        List<Comentario> comentarios = comentarioServices.BuscarComentarios(Convert.ToInt32(idPost));
        List<ComentarioDTO> comentariosDTO = new List<ComentarioDTO>();
        foreach (Comentario comentario in comentarios)
        {
            ComentarioDTO dto = new ComentarioDTO(comentario, usuarioServices.BuscarUsuario(comentario.IdUsuario));
            dto.CantidadBancan = bancanServices.CantidadBancanComentario(comentario.Id).ToString();
            comentariosDTO.Add(dto);
        }
        PostDTO postDTO = new PostDTO(post, comentariosDTO, usuario);
        postDTO.PermitirBancar = (!bancanServices.UsuarioBancandoPost(usuario.Id_usuario, post.Id)).ToString();
        postDTO.CantidadBancan = bancanServices.CantidadBancanPost(post.Id).ToString();
        return postDTO;

    }

    [WebMethod]
    [System.Web.Script.Services.ScriptMethod(ResponseFormat = System.Web.Script.Services.ResponseFormat.Json)]
    public List<PostDTO> BuscarTopTenPost(int idLogueado)
    {

        List<Post> posts = PostsServices.TopTenPostsMasBancados();
        List<PostDTO> dtos = new List<PostDTO>();
        foreach (Post post in posts)
        {
            Usuario usuario = usuarioServices.BuscarUsuario(post.IdCreador);
            List<Comentario> comentarios = comentarioServices.BuscarComentarios(Convert.ToInt32(post.Id));
            List<ComentarioDTO> comentariosDTO = new List<ComentarioDTO>();
            foreach (Comentario comentario in comentarios)
            {
                ComentarioDTO dto = new ComentarioDTO(comentario, usuarioServices.BuscarUsuario(comentario.IdUsuario));
                dto.PermitirBancar = (!bancanServices.UsuarioBancandoComentario(idLogueado, comentario.Id)).ToString();
                dto.CantidadBancan = bancanServices.CantidadBancanComentario(comentario.Id).ToString();
                comentariosDTO.Add(dto);
            }
            PostDTO postDTO = new PostDTO(post, comentariosDTO, usuario);
            postDTO.PermitirBancar = (!bancanServices.UsuarioBancandoPost(idLogueado, post.Id)).ToString();
            postDTO.CantidadBancan = bancanServices.CantidadBancanPost(post.Id).ToString();
            dtos.Add(postDTO);
        }
        return dtos;
        

    }
    
 

    [WebMethod]
    [System.Web.Script.Services.ScriptMethod(ResponseFormat = System.Web.Script.Services.ResponseFormat.Json)]
    public PostDTO BuscarPost(int idLogueado,string idPost)
    {
        
        Post post = PostsServices.BuscarPost(idPost);
        Usuario usuario = usuarioServices.BuscarUsuario(post.IdCreador);
        List<Comentario> comentarios = comentarioServices.BuscarComentarios(Convert.ToInt32(idPost));
        List<ComentarioDTO> comentariosDTO = new List<ComentarioDTO>();
        foreach(Comentario comentario in comentarios)
        {
            ComentarioDTO dto = new ComentarioDTO(comentario, usuarioServices.BuscarUsuario(comentario.IdUsuario));
            dto.PermitirBancar = (!bancanServices.UsuarioBancandoComentario(idLogueado, comentario.Id)).ToString();
            dto.CantidadBancan = bancanServices.CantidadBancanComentario(comentario.Id).ToString();
            comentariosDTO.Add(dto);
        }
        PostDTO postDTO = new PostDTO(post, comentariosDTO, usuario);
        postDTO.PermitirBancar = (!bancanServices.UsuarioBancandoPost(idLogueado,post.Id)).ToString();
        postDTO.CantidadBancan = bancanServices.CantidadBancanPost(post.Id).ToString();
        return postDTO;
        
    }


    [WebMethod]
    [System.Web.Script.Services.ScriptMethod(ResponseFormat = System.Web.Script.Services.ResponseFormat.Json)]
    public bool EliminarPost(string idPost)
    {

        return PostsServices.EliminarPost(Convert.ToInt32(idPost));
        
    }

}
